#ifndef USERINFODIALOG_H
#define USERINFODIALOG_H

#include <QDialog>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QFormLayout>
#include <QLabel>
#include <QPushButton>
#include <QFrame>
#include <QJsonDocument>
#include <QJsonObject>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QTimer>
#include "configmanager.h"
#include "apimanager.h"

/**
 * @brief 用户信息对话框类
 *
 * 显示已登录用户的详细信息，包括：
 * - 用户账号（邮箱地址）
 * - 账户类型（试用版/付费版）
 * - 订阅到期时间
 * - 退出登录功能
 */
class UserInfoDialog : public QDialog
{
    Q_OBJECT

public:
    explicit UserInfoDialog(QWidget *parent = nullptr);
    ~UserInfoDialog();

signals:
    void logoutRequested();

private slots:
    void onLogoutClicked();
    void onCloseClicked();
    void onUserProfileFetched(const QJsonObject& userProfile);
    void onUserSubscriptionFetched(const QJsonObject& subscription);
    void onApiError(const QString& error, const QString& details);
    void onLogoutFinished(bool success);

    // 订阅信息更新
    void updateSubscriptionInfo(const QJsonObject& subscription);

private:
    // UI初始化
    void setupUI();
    void setupStyles();
    void setupConnections();

    // 数据加载
    void loadUserInfo();
    QJsonObject decodeJWTPayload(const QString& token);

    // 服务器注销
    void performServerLogout();
    void clearLocalAuthAndExit();

    // UI状态
    void setLoadingState(bool loading);

    // UI辅助方法
    void createInfoItem(const QString& labelText, QLabel*& label, QLabel*& value);
    void updateSubscriptionStatus(bool active);
    QPixmap createCrystalDot(bool active) const;

private:
    // UI组件
    QVBoxLayout* m_mainLayout;
    QFormLayout* m_infoLayout;
    QHBoxLayout* m_buttonLayout;

    QLabel* m_titleLabel;
    QFrame* m_separatorLine;

    // 用户信息显示
    QLabel* m_emailLabel;
    QLabel* m_emailValue;
    QLabel* m_typeLabel;
    QLabel* m_typeValue;
    QLabel* m_statusDisplayLabel;
    QLabel* m_statusIcon;
    QLabel* m_expiryLabel;
    QLabel* m_expiryValue;
    QLabel* m_deviceNameLabel;
    QLabel* m_deviceNameValue;

    // 按钮
    QPushButton* m_logoutButton;
    QPushButton* m_closeButton;

    // 状态标签
    QLabel* m_statusLabel;

    // 网络请求
    QNetworkAccessManager m_nam;
    QNetworkReply* m_reply;

    // API管理器（新版本）
    ApiManager* m_apiManager;

    // 用户数据
    QString m_userEmail;
    QString m_userType;
    QString m_subscriptionExpiry;
    QString m_deviceName;
    QString m_loginTime;
    QString m_token;

    // 防止重复退出登录
    bool m_isLoggingOut = false;
};

#endif // USERINFODIALOG_H